﻿using System;



namespace AnimalApplication

{

    // 1) 定义抽象类Animal

    abstract class Animal

    {

        // 属性name

        public string Name { get; set; }



        // 相关构造方法

        public Animal(string name)

        {

            Name = name;

        }



        // 抽象方法enjoy()表示动物高兴时动作

        public abstract void Enjoy();

    }



    // 2) 定义Cat类继承于Animal类

    class Cat : Animal

    {

        // 属性eyesColor

        public string EyesColor { get; set; }



        // 相关构造方法

        public Cat(string name, string eyesColor) : base(name)

        {

            EyesColor = eyesColor;

        }



        // 具体化父类中的抽象方法

        public override void Enjoy()

        {

            Console.WriteLine($"{Name} (眼睛颜色: {EyesColor}) 高兴地喵喵叫，并在地上打滚!");

        }

    }



    // 3) 定义Dog类继承于Animal类

    class Dog : Animal

    {

        // 属性furColor

        public string FurColor { get; set; }



        // 相关构造方法

        public Dog(string name, string furColor) : base(name)

        {

            FurColor = furColor;

        }



        // 具体化父类中的抽象方法

        public override void Enjoy()

        {

            Console.WriteLine($"{Name} (毛发颜色: {FurColor}) 高兴地汪汪叫，并摇着尾巴!");

        }

    }



    // 4) 定义Lady类

    class Lady

    {

        // 属性name

        public string Name { get; set; }



        // Animal类型的属性pet表示女士所养的宠物

        public Animal Pet { get; set; }



        // 构造方法

        public Lady(string name, Animal pet)

        {

            Name = name;

            Pet = pet;

        }



        // 方法myPetEnjoy表示此女士的宠物在高兴时的动作

        public void MyPetEnjoy()

        {

            Console.Write($"{Name}的宠物");

            Pet.Enjoy();

        }

    }



    // 5) 定义测试类

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("动物与女士类测试程序");

            Console.WriteLine("====================");

            Console.WriteLine();



            // 创建一个张女士，养了一只猫，让这只猫笑一笑

            Cat cat = new Cat("咪咪", "蓝色");

            Lady zhangLady = new Lady("张女士", cat);

            zhangLady.MyPetEnjoy();

            Console.WriteLine();



            // 创建一个王女士，养了一只狗，让这只狗叫一叫

            Dog dog = new Dog("旺财", "棕色");

            Lady wangLady = new Lady("王女士", dog);

            wangLady.MyPetEnjoy();

            Console.WriteLine();



            // 额外测试：创建更多动物和女士

            Cat blackCat = new Cat("小黑", "绿色");

            Lady liLady = new Lady("李女士", blackCat);

            liLady.MyPetEnjoy();

            Console.WriteLine();



            Dog whiteDog = new Dog("小白", "白色");

            Lady zhaoLady = new Lady("赵女士", whiteDog);

            zhaoLady.MyPetEnjoy();

            Console.WriteLine();



            // 测试多态性：使用Animal引用指向不同的子类对象

            Console.WriteLine("多态性测试:");

            Animal[] animals = new Animal[2];

            animals[0] = new Cat("花花", "黄色");

            animals[1] = new Dog("大黄", "金色");



            foreach (Animal animal in animals)

            {

                Console.Write("动物高兴时的动作: ");

                animal.Enjoy();

            }



            Console.ReadLine();

        }

    }

}